package com.dou.config;

import com.dou.mapper.EmployeeDao;
import com.dou.mapper.LoginDao;
import com.dou.pojo.login;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import java.util.Collection;
import java.util.List;

/**
 * Created with IntelliJ IDEA 2021.1 x64
 *
 * @Author: 窦义超
 * @Date: 2021/07/2021/7/21/13:25
 * @Description:
 */
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    /**
     *
     *  连式编程
     *    授权
     *
     */
    @Autowired
    LoginDao loginDao;
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //首页所有人可以访问功能页只有对应有权限的人可以访问
        http.authorizeRequests().antMatchers("/").permitAll().antMatchers("/toZhuce").permitAll().antMatchers("/zhuce").permitAll()
//        .antMatchers("/level1/**").hasRole("vip1")
//                .antMatchers("/level2/**").hasRole("vip2")
//                .antMatchers("/level3/**").hasRole("vip3")
        ;
        //没有权限跳到登录页
        //定制登录页
      http.formLogin().loginPage("/index.html");
        //防止跨站
        http.csrf().disable();
        //记住我
        http.rememberMe().rememberMeParameter("remember");
        //注销
      http.logout().logoutSuccessUrl("/");
    }
    //定义认证规则
   /**
   @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
           //在内存中定义，也可以在jdbc中去拿....
       //Spring security 5.0中新增了多种加密方式，也改变了密码的格式。
       //要想我们的项目还能够正常登陆，需要修改一下configure中的代码。我们要将前端传过来的密码进行某种方式加密
       //spring security 官方推荐的是使用bcrypt加密方式。
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                .withUser("kuangshen").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2","vip3")
                .and()
                .withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
                .and()
                .withUser("guest").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2");
    }*/
}
